@@ -1,4 +1,5 @@ |
||
1 | 1 |
github "Yalantis/PullToRefresh" |
2 |
+github "eggswift/pull-to-refresh" |
|
2 | 3 |
github "ReactiveX/RxSwift" ~> 5.0 |
3 | 4 |
github "onevcat/Kingfisher" ~> 5.0 |
4 | 5 |
github "Alamofire/Alamofire" "5.0.0-beta.1" |
@@ -2,5 +2,6 @@ github "Alamofire/Alamofire" "5.0.0-beta.1" |
||
2 | 2 |
github "ReactiveX/RxSwift" "5.0.1" |
3 | 3 |
github "RxSwiftCommunity/RxDataSources" "4.0.1" |
4 | 4 |
github "Yalantis/PullToRefresh" "3.1" |
5 |
+github "eggswift/pull-to-refresh" "2.9" |
|
5 | 6 |
github "onevcat/Kingfisher" "5.5.0" |
6 | 7 |
github "tristanhimmelman/ObjectMapper" "3.4.2" |
@@ -1557,6 +1557,7 @@ |
||
1557 | 1557 |
"$(SRCROOT)/Carthage/Build/iOS/PullToRefresh.framework", |
1558 | 1558 |
"$(SRCROOT)/Carthage/Build/iOS/Differentiator.framework", |
1559 | 1559 |
"$(SRCROOT)/Carthage/Build/iOS/RxRelay.framework", |
1560 |
+ "$(SRCROOT)/Carthage/Build/iOS/ESPullToRefresh.framework", |
|
1560 | 1561 |
); |
1561 | 1562 |
name = "Run Script"; |
1562 | 1563 |
outputPaths = ( |
@@ -1569,6 +1570,7 @@ |
||
1569 | 1570 |
"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxCocoa.framework", |
1570 | 1571 |
"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Differentiator.framework", |
1571 | 1572 |
"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxRelay.framework", |
1573 |
+ "$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ESPullToRefresh.framework", |
|
1572 | 1574 |
); |
1573 | 1575 |
runOnlyForDeploymentPostprocessing = 0; |
1574 | 1576 |
shellPath = /bin/sh; |
@@ -34,6 +34,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate { |
||
34 | 34 |
registerAppConfiguration() |
35 | 35 |
|
36 | 36 |
window = UIWindow(frame: UIScreen.main.bounds) |
37 |
+ window?.backgroundColor = .white |
|
37 | 38 |
coordinator = AppCoordinator(window: window!) |
38 | 39 |
|
39 | 40 |
coordinator?.start().subscribe().disposed(by: disposeBag) |
@@ -107,7 +107,8 @@ public class GroupViewModel { |
||
107 | 107 |
} |
108 | 108 |
|
109 | 109 |
private func setNotification() { |
110 |
- NotificationCenter.default.rx.notification(.GroupItemsChanged).subscribe(onNext: { (notification) in |
|
110 |
+ NotificationCenter.default.rx.notification(.GroupItemsChanged).subscribe(onNext: { |
|
111 |
+ (notification) in |
|
111 | 112 |
guard let itemOperator = notification.userInfo?[GroupItemsOperator.key] as? GroupItemsOperator, |
112 | 113 |
case let .update(_, val) = itemOperator else { return } |
113 | 114 |
self.groupItem.accept(val) |
@@ -123,7 +124,8 @@ public class GroupViewModel { |
||
123 | 124 |
|
124 | 125 |
}).disposed(by: disposeBag) |
125 | 126 |
|
126 |
- NotificationCenter.default.rx.notification(.PhotoItemsChanged).subscribe(onNext: { (notification) in |
|
127 |
+ NotificationCenter.default.rx.notification(.PhotoItemsChanged).subscribe(onNext: { |
|
128 |
+ (notification) in |
|
127 | 129 |
guard let itemOperator = notification.userInfo?[PhotoItemsOperator.key] as? PhotoItemsOperator, |
128 | 130 |
case let .update(id, val) = itemOperator, |
129 | 131 |
let index = self._items.value.firstIndex(where: { $0.photo_id == id }) else { return } |
@@ -20,7 +20,7 @@ public protocol HomeViewModelDelegate: class { |
||
20 | 20 |
public class HomeViewModel { |
21 | 21 |
|
22 | 22 |
private var page: Int = 1 |
23 |
- private let disposeBag = DisposeBag() |
|
23 |
+ |
|
24 | 24 |
|
25 | 25 |
private var repository: HomeRepository |
26 | 26 |
|
@@ -44,19 +44,18 @@ public class HomeViewModel { |
||
44 | 44 |
return [AnimatableSectionModel(model: "photoItem", items: model)] |
45 | 45 |
}) |
46 | 46 |
} |
47 |
- |
|
47 |
+ |
|
48 |
+ private let disposeBag = DisposeBag() |
|
48 | 49 |
public weak var delegate: HomeViewModelDelegate? |
49 | 50 |
|
50 | 51 |
public init() { |
51 | 52 |
self.repository = HomeRepository() |
52 | 53 |
|
53 |
- scanBtnTapped.subscribe({ [weak self] _ in |
|
54 |
- guard let `self` = self else { return } |
|
54 |
+ scanBtnTapped.subscribe({ [unowned self] _ in |
|
55 | 55 |
self.delegate?.scanQR() |
56 | 56 |
}).disposed(by: disposeBag) |
57 | 57 |
|
58 |
- createBtnTapped.subscribe({ [weak self] _ in |
|
59 |
- guard let `self` = self else { return } |
|
58 |
+ createBtnTapped.subscribe({ [unowned self] _ in |
|
60 | 59 |
self.delegate?.createGroup() |
61 | 60 |
}).disposed(by: disposeBag) |
62 | 61 |
|
@@ -107,9 +106,11 @@ public class HomeViewModel { |
||
107 | 106 |
} |
108 | 107 |
|
109 | 108 |
private func setNotification() { |
110 |
- NotificationCenter.default.rx.notification(.GroupItemsChanged).subscribe(onNext: { (notification) in |
|
109 |
+ NotificationCenter.default.rx.notification(.GroupItemsChanged).subscribe(onNext: { |
|
110 |
+ [unowned self] (notification) in |
|
111 | 111 |
guard let userInfo = notification.userInfo, |
112 |
- let itemOperator = userInfo[GroupItemsOperator.key] as? GroupItemsOperator else { return } |
|
112 |
+ let itemOperator = userInfo["operator"] as? GroupItemsOperator else { return } |
|
113 |
+ |
|
113 | 114 |
var items = self._items.value |
114 | 115 |
switch itemOperator { |
115 | 116 |
case let .update(groupId, val): |
@@ -130,10 +131,12 @@ public class HomeViewModel { |
||
130 | 131 |
} |
131 | 132 |
}).disposed(by: disposeBag) |
132 | 133 |
|
133 |
- NotificationCenter.default.rx.notification(.PhotoItemsChanged).subscribe(onNext: { (notification) in |
|
134 |
- guard let itemOperator = notification.userInfo?[PhotoItemsOperator.key] as? PhotoItemsOperator, |
|
134 |
+ NotificationCenter.default.rx.notification(.PhotoItemsChanged).subscribe(onNext: { |
|
135 |
+ [unowned self] (notification) in |
|
136 |
+ guard let itemOperator = notification.userInfo?["operator"] as? PhotoItemsOperator, |
|
135 | 137 |
case let .update(photoId, val) = itemOperator, |
136 |
- let index = self._items.value.firstIndex(where: { $0.photo_id == photoId }) else { return } |
|
138 |
+ let index = self._items.value.firstIndex(where: { $0.photo_id == photoId }) |
|
139 |
+ else { return } |
|
137 | 140 |
var items = self._items.value |
138 | 141 |
items[index] = val |
139 | 142 |
self._items.accept(items) |
@@ -34,20 +34,17 @@ public class MessageViewModel { |
||
34 | 34 |
public init() { |
35 | 35 |
self.repository = MessageRepository() |
36 | 36 |
|
37 |
- sysBtnTapped.asObservable().subscribe {[weak self] (_) in |
|
38 |
- guard let `self` = self else { return } |
|
37 |
+ sysBtnTapped.asObservable().subscribe {[unowned self] _ in |
|
39 | 38 |
self.readedTip = self.sysReadedTip |
40 | 39 |
self.delegate?.didSelect(type: .system) |
41 | 40 |
}.disposed(by: disposeBag) |
42 | 41 |
|
43 |
- commentBtnTapped.asObservable().subscribe {[weak self] (_) in |
|
44 |
- guard let `self` = self else { return } |
|
42 |
+ commentBtnTapped.asObservable().subscribe {[unowned self] _ in |
|
45 | 43 |
self.readedTip = self.commentReadedTip |
46 | 44 |
self.delegate?.didSelect(type: .comment) |
47 | 45 |
}.disposed(by: disposeBag) |
48 | 46 |
|
49 |
- thumbupBtnTapped.asObservable().subscribe {[weak self] (_) in |
|
50 |
- guard let `self` = self else { return } |
|
47 |
+ thumbupBtnTapped.asObservable().subscribe {[unowned self] _ in |
|
51 | 48 |
self.readedTip = self.thumbupReadedTip |
52 | 49 |
self.delegate?.didSelect(type: .thumbup) |
53 | 50 |
}.disposed(by: disposeBag) |
@@ -47,7 +47,6 @@ public final class PhotoDetailItemViewModel { |
||
47 | 47 |
} |
48 | 48 |
|
49 | 49 |
private func loadThumbupAndComment() { |
50 |
- print(#function) |
|
51 | 50 |
Single.zip(repository.loadComments(), repository.loadThumbups()).subscribe(onSuccess: {[unowned self] (commentItems, thumbupItems) in |
52 | 51 |
self.commentItems.accept(commentItems) |
53 | 52 |
self.thumbupItems.accept(thumbupItems) |
@@ -127,7 +127,6 @@ public final class PhotoDetailViewModel { |
||
127 | 127 |
} |
128 | 128 |
|
129 | 129 |
public func willShow(index: Int) { |
130 |
- print(index) |
|
131 | 130 |
currIndex = index |
132 | 131 |
_hasGetPrice.accept(false) |
133 | 132 |
itemViewModel.item.accept(_items.value[index]) |
@@ -11,10 +11,10 @@ import UIKit |
||
11 | 11 |
public class NavigationController: UINavigationController { |
12 | 12 |
|
13 | 13 |
private var operation: Operation = .none |
14 |
- private var barConfigures: [UIViewController?: NavigationBarConfiguration] = [:] |
|
14 |
+ private var barConfigures = [UIViewController: NavigationBarConfiguration]() |
|
15 | 15 |
|
16 |
- private var _fromFakeBar = UIToolbar() |
|
17 |
- private var _toFakeBar = UIToolbar() |
|
16 |
+ private var _fromFakeBar: UIToolbar? = nil |
|
17 |
+ private var _toFakeBar: UIToolbar? = nil |
|
18 | 18 |
|
19 | 19 |
override public init(rootViewController: UIViewController) { |
20 | 20 |
super.init(navigationBarClass: NavigationBar.classForCoder(), toolbarClass: nil) |
@@ -73,24 +73,27 @@ fileprivate extension NavigationController { |
||
73 | 73 |
func setFromFakeNavigationBar(for from: UIViewController) { |
74 | 74 |
if let navBarFrame = from.getFakeBarFrame(for: navigationBar) { |
75 | 75 |
_fromFakeBar = UIToolbar(configure: barConfigures[from] ?? .default) |
76 |
- _fromFakeBar.delegate = self |
|
77 |
- _fromFakeBar.frame = navBarFrame |
|
78 |
- from.view.addSubview(_fromFakeBar) |
|
76 |
+ _fromFakeBar?.delegate = self |
|
77 |
+ _fromFakeBar?.frame = navBarFrame |
|
78 |
+ from.view.addSubview(_fromFakeBar!) |
|
79 | 79 |
} |
80 | 80 |
} |
81 | 81 |
|
82 | 82 |
func setToFakeNavigationBar(for to: UIViewController) { |
83 | 83 |
if let navBarFrame = to.getFakeBarFrame(for: navigationBar) { |
84 | 84 |
_toFakeBar = UIToolbar(configure: barConfigures[to] ?? .default) |
85 |
- _toFakeBar.delegate = self |
|
86 |
- _toFakeBar.frame = navBarFrame |
|
87 |
- to.view.addSubview(_toFakeBar) |
|
85 |
+ _toFakeBar?.delegate = self |
|
86 |
+ _toFakeBar?.frame = navBarFrame |
|
87 |
+ to.view.addSubview(_toFakeBar!) |
|
88 | 88 |
} |
89 | 89 |
} |
90 | 90 |
|
91 | 91 |
func clearFake() { |
92 |
- _fromFakeBar.removeFromSuperview() |
|
93 |
- _toFakeBar.removeFromSuperview() |
|
92 |
+ _fromFakeBar?.removeFromSuperview() |
|
93 |
+ _toFakeBar?.removeFromSuperview() |
|
94 |
+ |
|
95 |
+ _fromFakeBar = nil |
|
96 |
+ _toFakeBar = nil |
|
94 | 97 |
|
95 | 98 |
guard let from = transitionCoordinator?.viewController(forKey: .from), |
96 | 99 |
operation == .pop else { return } |
@@ -130,7 +133,7 @@ extension NavigationController: UINavigationControllerDelegate { |
||
130 | 133 |
vc = context.viewController(forKey: .to) |
131 | 134 |
} |
132 | 135 |
self.navigationBar.getBarBackground()?.alpha = 1 |
133 |
- self.navigationBar.apply(for: self.barConfigures[vc] ?? .default) |
|
136 |
+ self.navigationBar.apply(for: self.barConfigures[vc!] ?? .default) |
|
134 | 137 |
self.clearFake() |
135 | 138 |
}) |
136 | 139 |
} |
@@ -23,7 +23,6 @@ public final class AppCoordinator: BaseCoordinator<Void> { |
||
23 | 23 |
public init(window: UIWindow) { |
24 | 24 |
self.window = window |
25 | 25 |
self.containerViewController = ContainerViewController() |
26 |
- |
|
27 | 26 |
super.init(navigationController: NavigationController(rootViewController: containerViewController), |
28 | 27 |
viewController: containerViewController) |
29 | 28 |
} |
@@ -82,6 +82,11 @@ final class GroupViewController: UIViewController { |
||
82 | 82 |
collectionView.startRefreshing(at: .top) |
83 | 83 |
} |
84 | 84 |
|
85 |
+ override func removeFromParent() { |
|
86 |
+ super.removeFromParent() |
|
87 |
+ print(self) |
|
88 |
+ } |
|
89 |
+ |
|
85 | 90 |
deinit { |
86 | 91 |
collectionView.removeAllPullToRefresh() |
87 | 92 |
} |
@@ -29,7 +29,7 @@ class HomeCoordinator: BaseCoordinator<Void> { |
||
29 | 29 |
@discardableResult |
30 | 30 |
override func start() -> Observable<Void> { |
31 | 31 |
homeViewController.viewModel.delegate = self |
32 |
- |
|
32 |
+ deallocatedDispose.dispose() |
|
33 | 33 |
return Observable.never() |
34 | 34 |
} |
35 | 35 |
} |
@@ -10,7 +10,7 @@ import RxCocoa |
||
10 | 10 |
import RxDataSources |
11 | 11 |
import PaiaiDataKit |
12 | 12 |
import PaiaiUIKit |
13 |
-import PullToRefresh |
|
13 |
+import ESPullToRefresh |
|
14 | 14 |
|
15 | 15 |
final class HomeViewController: UIViewController { |
16 | 16 |
|
@@ -20,22 +20,14 @@ final class HomeViewController: UIViewController { |
||
20 | 20 |
// MARK: data property |
21 | 21 |
fileprivate let disposeBag = DisposeBag() |
22 | 22 |
|
23 |
- internal var viewModel: HomeViewModel! |
|
24 |
- internal var userInfoViewModel: UserInfoViewModel! |
|
23 |
+ var viewModel: HomeViewModel! |
|
24 |
+ var userInfoViewModel: UserInfoViewModel! |
|
25 | 25 |
|
26 | 26 |
override func viewDidLoad() { |
27 | 27 |
super.viewDidLoad() |
28 | 28 |
initalize() |
29 | 29 |
} |
30 | 30 |
|
31 |
- override func viewDidAppear(_ animated: Bool) { |
|
32 |
- super.viewDidAppear(animated) |
|
33 |
- } |
|
34 |
- |
|
35 |
- override func viewDidDisappear(_ animated: Bool) { |
|
36 |
- super.viewDidDisappear(animated) |
|
37 |
- } |
|
38 |
- |
|
39 | 31 |
func initalize() { |
40 | 32 |
collectionView.register(UINib(nibName: "PhotoCell", |
41 | 33 |
bundle: Bundle(identifier: "com.Paiai-iOS")), |
@@ -51,22 +43,22 @@ final class HomeViewController: UIViewController { |
||
51 | 43 |
} |
52 | 44 |
|
53 | 45 |
private func setupReloadControl() { |
54 |
- collectionView.addPullToRefresh(PullToRefresh()) { |
|
46 |
+ collectionView.es.addPullToRefresh { |
|
55 | 47 |
[unowned self] in |
56 | 48 |
self.viewModel.reload() |
57 | 49 |
} |
58 | 50 |
} |
59 | 51 |
|
60 | 52 |
private func setupLoadingControl() { |
61 |
- collectionView.addPullToRefresh(PullToRefresh(position: .bottom)) { |
|
62 |
- [weak self] in |
|
63 |
- guard let `self` = self else { return } |
|
53 |
+ collectionView.es.addInfiniteScrolling { |
|
54 |
+ [unowned self] in |
|
64 | 55 |
self.viewModel.preload() |
65 | 56 |
} |
66 | 57 |
} |
67 | 58 |
|
68 | 59 |
deinit { |
69 |
- collectionView.removeAllPullToRefresh() |
|
60 |
+ collectionView.es.removeRefreshFooter() |
|
61 |
+ collectionView.es.removeRefreshHeader() |
|
70 | 62 |
} |
71 | 63 |
} |
72 | 64 |
|
@@ -100,11 +92,12 @@ fileprivate extension HomeViewController { |
||
100 | 92 |
func bindViewModelToRefreshing() { |
101 | 93 |
viewModel.isLoading |
102 | 94 |
.asDriver(onErrorJustReturn: true) |
103 |
- .drive(onNext: {[unowned self] flag in |
|
95 |
+ .drive(onNext: {[weak self] flag in |
|
96 |
+ guard let `self` = self else { return } |
|
104 | 97 |
if flag { |
105 |
- self.collectionView.endRefreshing(at: .top) |
|
98 |
+ self.collectionView.es.stopPullToRefresh() |
|
106 | 99 |
} else { |
107 |
- self.collectionView.endRefreshing(at: .bottom) |
|
100 |
+ self.collectionView.es.stopLoadingMore() |
|
108 | 101 |
} |
109 | 102 |
}).disposed(by: disposeBag) |
110 | 103 |
} |
@@ -114,12 +107,11 @@ fileprivate extension HomeViewController { |
||
114 | 107 |
} |
115 | 108 |
|
116 | 109 |
func bindUserInfoViewModelToView() { |
117 |
- userInfoViewModel.isLoggedIn |
|
118 |
- .asDriver(onErrorJustReturn: ()) |
|
119 |
- .drive(onNext: {[unowned self] _ in |
|
120 |
- self.viewModel.clear() |
|
121 |
- self.collectionView.startRefreshing(at: .top) |
|
122 |
- }).disposed(by: disposeBag) |
|
110 |
+ userInfoViewModel.isLoggedIn.subscribe({[weak self] _ in |
|
111 |
+ guard let `self` = self else { return } |
|
112 |
+ self.viewModel.clear() |
|
113 |
+ self.collectionView.startRefreshing(at: .top) |
|
114 |
+ }).disposed(by: disposeBag) |
|
123 | 115 |
} |
124 | 116 |
|
125 | 117 |
func bindViewModelToCollectionView() { |
@@ -22,6 +22,7 @@ class MessageCoordinator: BaseCoordinator<Void> { |
||
22 | 22 |
|
23 | 23 |
override func start() -> Observable<Void> { |
24 | 24 |
messageViewController.viewModel.delegate = self |
25 |
+ deallocatedDispose.dispose() |
|
25 | 26 |
return Observable.never() |
26 | 27 |
} |
27 | 28 |
} |
@@ -7,8 +7,8 @@ |
||
7 | 7 |
// |
8 | 8 |
|
9 | 9 |
import UIKit |
10 |
-import PaiaiDataKit |
|
11 | 10 |
import PaiaiUIKit |
11 |
+ |
|
12 | 12 |
import RxSwift |
13 | 13 |
|
14 | 14 |
final class MineAboutViewController: UIViewController { |
@@ -30,6 +30,15 @@ final class MineAboutViewController: UIViewController { |
||
30 | 30 |
versionLabel.text = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String |
31 | 31 |
bindGestures() |
32 | 32 |
} |
33 |
+ |
|
34 |
+ override func viewDidDisappear(_ animated: Bool) { |
|
35 |
+ super.viewDidDisappear(animated) |
|
36 |
+ |
|
37 |
+ } |
|
38 |
+ |
|
39 |
+ deinit { |
|
40 |
+ print("deinit") |
|
41 |
+ } |
|
33 | 42 |
} |
34 | 43 |
|
35 | 44 |
fileprivate extension MineAboutViewController { |
@@ -42,7 +51,7 @@ fileprivate extension MineAboutViewController { |
||
42 | 51 |
func bindGestureToContactUsAction() { |
43 | 52 |
contactUsBtn.rx.tap |
44 | 53 |
.asObservable() |
45 |
- .subscribe { (_) in |
|
54 |
+ .subscribe { [unowned self] _ in |
|
46 | 55 |
let webVC = WebViewController(title: "联系我们", |
47 | 56 |
path: "https://pai.ai/page/contact_us") |
48 | 57 |
self.navigationController?.pushViewController(webVC) |
@@ -52,7 +61,7 @@ fileprivate extension MineAboutViewController { |
||
52 | 61 |
func bindGestureToScoreAction() { |
53 | 62 |
scoreBtn.rx.tap |
54 | 63 |
.asObservable() |
55 |
- .subscribe { (_) in |
|
64 |
+ .subscribe { _ in |
|
56 | 65 |
guard let url = URL(string: "https://itunes.apple.com/cn/app/pai-aipaiai/id1163960351?mt=8") else { |
57 | 66 |
return |
58 | 67 |
} |
@@ -63,7 +72,7 @@ fileprivate extension MineAboutViewController { |
||
63 | 72 |
func bindGestureToUserAgreementAction() { |
64 | 73 |
userAgreementBtn.rx.tap |
65 | 74 |
.asObservable() |
66 |
- .subscribe { (_) in |
|
75 |
+ .subscribe { [unowned self] _ in |
|
67 | 76 |
let webVC = WebViewController(title: "用户协议", |
68 | 77 |
path: "https://pai.ai/page/user_agreement") |
69 | 78 |
self.navigationController?.pushViewController(webVC) |
@@ -78,3 +87,4 @@ extension MineAboutViewController: Storyboarded { |
||
78 | 87 |
return UIStoryboard.mine.instantiateViewController(type: MineAboutViewController.self) |
79 | 88 |
} |
80 | 89 |
} |
90 |
+ |
@@ -25,8 +25,6 @@ class MineCoordinator: BaseCoordinator<Void> { |
||
25 | 25 |
mineViewController.delegate = self |
26 | 26 |
return didCancel |
27 | 27 |
} |
28 |
- |
|
29 |
- override func listenDeallocate() {} |
|
30 | 28 |
} |
31 | 29 |
|
32 | 30 |
extension MineCoordinator: MineViewControllerDelegate { |
@@ -46,7 +44,7 @@ extension MineCoordinator: MineViewControllerDelegate { |
||
46 | 44 |
|
47 | 45 |
func didSelect(_ item: MineItem) { |
48 | 46 |
mineViewController.dismissController() |
49 |
- |
|
47 |
+ deallocatedDispose.dispose() |
|
50 | 48 |
let vc: UIViewController |
51 | 49 |
switch item { |
52 | 50 |
case .group: |
@@ -58,8 +56,8 @@ extension MineCoordinator: MineViewControllerDelegate { |
||
58 | 56 |
case .about: |
59 | 57 |
vc = makeMineAboutViewController() |
60 | 58 |
} |
61 |
- |
|
62 |
- vc.rx.deallocated.subscribe(onNext: { _ in |
|
59 |
+ |
|
60 |
+ vc.rx.deallocating.subscribe(onNext: { _ in |
|
63 | 61 |
self.didCancel.onNext(()) |
64 | 62 |
}).disposed(by: disposeBag) |
65 | 63 |
} |
@@ -103,8 +101,8 @@ fileprivate extension MineCoordinator { |
||
103 | 101 |
|
104 | 102 |
func makeMineAboutViewController() -> MineAboutViewController { |
105 | 103 |
let vc = MineAboutViewController.instantiate() |
106 |
- navigationController.pushViewController(vc) |
|
107 |
- |
|
104 |
+ navigationController.pushViewController(vc, animated: true) |
|
105 |
+ print(navigationController) |
|
108 | 106 |
return vc |
109 | 107 |
} |
110 | 108 |
|
@@ -7,7 +7,7 @@ |
||
7 | 7 |
// |
8 | 8 |
|
9 | 9 |
import RxSwift |
10 |
-import Foundation |
|
10 |
+import UIKit |
|
11 | 11 |
|
12 | 12 |
public class BaseCoordinator<ResultType> { |
13 | 13 |
|
@@ -15,6 +15,7 @@ public class BaseCoordinator<ResultType> { |
||
15 | 15 |
|
16 | 16 |
let disposeBag = DisposeBag() |
17 | 17 |
var didCancel = PublishSubject<Void>() |
18 |
+ var deallocatedDispose = Disposables.create() |
|
18 | 19 |
var navigationController: UINavigationController |
19 | 20 |
var viewController: UIViewController |
20 | 21 |
|
@@ -25,7 +26,13 @@ public class BaseCoordinator<ResultType> { |
||
25 | 26 |
init(navigationController: UINavigationController, viewController: UIViewController) { |
26 | 27 |
self.viewController = viewController |
27 | 28 |
self.navigationController = navigationController |
28 |
- listenDeallocate() |
|
29 |
+ |
|
30 |
+ deallocatedDispose = viewController.rx.viewDidDisappear.subscribe(onNext: {[weak self] _ in |
|
31 |
+ guard let `self` = self else { return } |
|
32 |
+ if !self.navigationController.viewControllers.contains(viewController) { |
|
33 |
+ self.didCancel.onNext(()) |
|
34 |
+ } |
|
35 |
+ }) |
|
29 | 36 |
} |
30 | 37 |
|
31 | 38 |
private func store<T>(coordinator: BaseCoordinator<T>) { |
@@ -33,6 +40,7 @@ public class BaseCoordinator<ResultType> { |
||
33 | 40 |
} |
34 | 41 |
|
35 | 42 |
private func free<T>(coordinator: BaseCoordinator<T>) { |
43 |
+ print(coordinator) |
|
36 | 44 |
childCoordinators[coordinator.identifier] = nil |
37 | 45 |
} |
38 | 46 |
|
@@ -48,13 +56,4 @@ public class BaseCoordinator<ResultType> { |
||
48 | 56 |
func start() -> Observable<ResultType> { |
49 | 57 |
fatalError("Start method should be implemented.") |
50 | 58 |
} |
51 |
- |
|
52 |
- func listenDeallocate() { |
|
53 |
- navigationController.rx.willShow.subscribe(onNext: {[weak self] (_, _) in |
|
54 |
- guard let `self` = self else { return } |
|
55 |
- if !self.navigationController.viewControllers.contains(self.viewController) { |
|
56 |
- self.didCancel.onNext(()) |
|
57 |
- } |
|
58 |
- }).disposed(by: disposeBag) |
|
59 |
- } |
|
60 | 59 |
} |